// 基于axios封装网络请求
import router from '@/router'
import store from '@/store'
import Axios from 'axios'
import { getToken } from './token'
const axios = Axios.create({
  baseURL: 'http://toutiao.itheima.net',
  timeout: 5000
})

// 请求拦截器
axios.interceptors.request.use(config => {
  // 发起请求之前干点什么
  // 判断Authorization中是否有token,本地有token但是Authorization没有的话就进行赋值
  if (getToken() && config.headers.Authorization === undefined) { config.headers.Authorization = `Bearer ${getToken()}` }
  return config
}, err => {
  return Promise.reject(err)
})

// 响应拦截器
axios.interceptors.response.use(config => {
  // 对响应的数据做点什么
  return config
}, err => {
  // 对响应的错误做点什么
  // 返回状态码为401 说明身份未认证
  if (err.response.status === 401) {
    store.commit('setToken', '')
    router.push('/login')
  }
  return Promise.reject(err)
})

/*
axios({
    url:'请求地址',
    method:'请求方式',
    params:{},
    data:{},
    headers:{}
})
*/

// 导出自定义函数，参数对象结构赋值
export default ({ url, method = 'GET', params = {}, data = {}, headers = {} }) => {
  return axios({
    url,
    method,
    params,
    data,
    headers
  })
}
